import computed from 'ember-addons/ember-computed-decorators';
import ValidState from 'wizard/mixins/valid-state';
import { ajax } from 'wizard/lib/ajax';

export default Ember.Object.extend(ValidState, {
  id: null,

  @computed('index')
  displayIndex: index => index + 1,

  @computed('fields.[]')
  fieldsById(fields) {
    const lookup = {};
    fields.forEach(field => lookup[field.get('id')] = field);
    return lookup;
  },

  validate() {
    let allValid = true;
    const result = { warnings: [] };

    this.get('fields').forEach(field => {
      allValid = allValid && field.check();
      const warning = field.get('warning');
      if (warning) {
        result.warnings.push(warning);
      }
    });

    this.setValid(allValid);

    return result;
  },

  fieldError(id, description) {
    const field = this.get('fields').findBy('id', id);
    if (field) {
      field.setValid(false, description);
    }
  },

  save() {
    const fields = {};
    this.get('fields').forEach(f => fields[f.id] = f.value);

    return ajax({
      url: `/wizard/steps/${this.get('id')}`,
      type: 'PUT',
      data: { fields }
    }).catch(response => {
      response.responseJSON.errors.forEach(err => this.fieldError(err.field, err.description));
      throw response;
    });
  }
});
